home *** CD-ROM | disk | FTP | other *** search
/ BBS Toolkit / BBS Toolkit.iso / pc_board / ulp092b.zip / ULP.DOC < prev    next >
Text File  |  1992-03-29  |  61KB  |  1,152 lines

  1.  
  2.     ┌───────────────────┐
  3.     │                   │ ║                UpLoadProcessor
  4.     │    ╥   ╥ ╥        │ ║
  5.     │    ║   ║ ║ ╓──╖   │ ║                 Version 0.92ß
  6.     │    ║   ║ ║ ║  ║   │ ║
  7.     │    ╙───╜ ╨ ║──╜   │ ║        (c) Copyright 1992 - Stacy Smith
  8.     │            ╨      │ ║
  9.     └───────────────────┘ ║
  10.       ════════════════════╝
  11.  
  12.  
  13.                                 Courtesy of:
  14.  
  15.                         The Bloom Beacon-Picayune BBS
  16.                                (804) 525-9760
  17.                      300-14,400 Baud (USRobotics V.32bis)
  18.                               FidoNet 1:276/112
  19.                                   Intelec
  20.  
  21.                                 Stacy Smith
  22.                               Route 6 Box 189
  23.                            Forest, Virginia 24551
  24.  
  25.  
  26. ┌────────────────────┐
  27. │  1. Introduction:  │
  28. └────────────────────┘
  29.  
  30. This system was born out of a need for a universal upload processor. There are
  31. many alternative systems available, but they are limited to the ZIP format and
  32. perhaps one or two others. Few are able to handle self-extracting archives.
  33. Most are limited in the number of levels of archive nesting allowed in a file
  34. to be tested. All require the use of a third-party duplicate file checking
  35. system if you want to screen your uploads for duplicates.
  36.  
  37. I converted my BBS files over to the ARJ compression format, due to its
  38. superior compression ratio over PKZip and its features over LHA. I do not
  39. intend to debate the merits of one archive format over another, but due to my
  40. decision, the need for a universal upload processor became apparent, so off I
  41. went.
  42.  
  43. While I was at it, I decided to incorporate other technologies, such as
  44. duplicate checking, archive format conversion, information lines, support for
  45. internal description files, etc., into a single package. This program is the
  46. result of my efforts to allow my BBS to handle any archive that my users can
  47. throw at it.
  48.  
  49.  
  50. ┌──────────────────────────────────────────────┐
  51. │  2. Features of the UpLoadProcessor System:  │
  52. └──────────────────────────────────────────────┘
  53.  
  54.       ∙ Identifies and processes ARC, ARJ, HYP, LZH, PAK, ZIP, ZOO and GIF
  55.         files, regardless of their file extensions (ideal for software
  56.         distribution networks, like .SDN files).
  57.       ∙ Identifies and processes ARJ, LZH, PAK and ZIP self-extracting (SFX)
  58.         archives.
  59.       ∙ Scans ARC, PAK, ZIP and ZIP SFX archives for DOS reserved keywords to
  60.         prevent hacking by hex-editing. (ARJ and LHA are resistant to these
  61.         type of hacking attempts).
  62.       ∙ Detects ARJ security envelopes and ZIP authenticity verification (-AV)
  63.         stamps, and can be left alone after processing (configurable).
  64.       ∙ Selected uncompressed files uploaded can be processed and compressed
  65.         using your default format.
  66.       ∙ Removes known BBS ads from archives; includes a BBS ads maintenance
  67.         utility so sysops can update their BBS ads databases in real time.
  68.       ∙ Allows the use of up to 10 different archiving programs, all user-
  69.         configurable. Any archiving program used that is not listed above will
  70.         be identified using the file extension only, until it's signature is
  71.         determined and incorporated into the program.
  72.       ∙ Uses a recursive processing routine that will allow (theoretically)
  73.         unlimited nested archives (the only limit is imposed by DOS). This
  74.         routine has been tested to 5 levels deep as of this writing.
  75.       ∙ Allows the use of up to 5 different file-checking programs, all user-
  76.         configurable, for virus and trojan checking, etc.
  77.       ∙ Allows the use of up to 5 different GIF file checking programs, all
  78.         configurable, for integrity, etc..
  79.       ∙ User-definable disposition (rename or delete) of corrupted, duplicate
  80.         or other archives (not virus-related).
  81.       ∙ User-definable disposition (rename or delete) of virus-infected
  82.         archives.
  83.       ∙ Incorporates it's own CRC-32 duplicate checking system, as well as the
  84.         associated database processing software. No more shelling out to (and
  85.         registering!) third-party duplication-checking software, sacrificing
  86.         speed and memory. The amount of duplication allowed is user-selectable.
  87.         The internal duplicate checking routine can be disabled in favor of an
  88.         alternative third-party system. This system is extremely fast with ARJ
  89.         and ZIP archives, and it's database is much smaller than other systems.
  90.       ∙ Converts all uploads into a default archive format of your choosing,
  91.         or they may be re-archived in their original format (user-defined).
  92.         Nested archives can also be converted to your default format, or
  93.         re-archived using their original format. SFX archives can be archived
  94.         using your default format, or optionally left alone after verification.
  95.       ∙ Can utilize a user-defined time window (in months) for acceptance of
  96.         new upload files, based on the most recent file date in the archive.
  97.       ∙ Changes all archive file attributes to 'read/write' from 'read-only'.
  98.       ∙ Supports the use of private and public upload directories. Moves files
  99.         and upload descriptions from the private directory to the public
  100.         directory.
  101.       ∙ Honors the '/' identifier in the description marking the file as a
  102.         private upload for the sysop by processing the file, but not making
  103.         it public.
  104.       ∙ Supports the use of DESC.SDI and FILE-ID.DIZ description files in an
  105.         archive, user-configurable, for those not running PCBoard 14.5a+ and
  106.         PCBDESC.
  107.       ∙ Can optionally insert an archive information line in the file
  108.         description that contains the number of files, total uncompressed size,
  109.         oldest file date, and most recent file date. The information line
  110.         format and content is defined by the user.
  111.       ∙ Two modes of testing are available: normal mode, which fully unpacks
  112.         the archive and tests each file individually; and fast mode, whichs
  113.         scans a ZIP or ARJ archive directly for file CRCs and dates, and uses
  114.         the archiving program's internal integrity testing.
  115.       ∙ The online tester will accept a redirected ARJ or PKUNZIP archive
  116.         listing file to pre-verify the duplication and age limits before a user
  117.         uploads the actual archive, saving him grief and gnashing of teeth.
  118.       ∙ ULPTEST can generate COM port status output to inform the online user
  119.         of the progress of testing. ULPTEST supports IRQ2-7 and any port
  120.         address. The port information can be defined on the command-line or
  121.         can be read directly from PCBOARD.DAT and PCBOARD.SYS.
  122.       ∙ Archives failed for exceeding duplication limits can be viewed using a
  123.         function of ULPDB (the database program), to allow easy determination
  124.         of archive acceptance.
  125.       ∙ User-selectable process logging to a disk file. Two logging modes are
  126.         available: terse and verbose.
  127.       ∙ Written mostly in C (and a little assembler) for optimal speed, using
  128.         Borland C++ 3.0 and Turbo Assembler 3.0.
  129.       ∙ Lifetime registration; pay ONCE and your registration number will work
  130.         on all future versions!
  131.  
  132.  
  133. ┌─────────────────────────────────────────────────────┐
  134. │  3. Files Included in the ULP Distribution Archive  │
  135. └─────────────────────────────────────────────────────┘
  136.  
  137.         ULP.EXE         Event upload processing program.
  138.         ULPTEST.EXE     On-line testing program for use in PCBTEST.BAT.
  139.         ULPDB.EXE       CRC-32 database creation and maintenance program.
  140.         ULPADS.EXE      BBS ads database maintenance program.
  141.         ULPADS.DB       BBS ads database file.
  142.         ULP.DOC         This file.
  143.         ULP.CFG         Sample configuration file for the ULP system.
  144.         HISTORY.TXT     ULP revision history in reverse order.
  145.         ULPBLT          Archive verification bulletin for sysops to post.
  146.         PCBTEST.BAT     Sample PCBTEST.BAT file for using ULPTEST.
  147.         REGISTER.FRM    Registration form for ULP.
  148.         FILE_ID.DIZ     Internal description file.
  149.  
  150. When you unzip the distribution archive, you should see my PKZIP authenticity
  151. verification stamp, and a '-AV' after every file in the archive:
  152.  
  153.         # SSU301    The Bloom Beacon-Picayune BBS
  154.  
  155. If there are any files missing or added, or the -AV stamp is missing, the
  156. archive has been tampered with. It would be advisable to call my BBS (listed at
  157. the top of this document) for the latest version of ULP.
  158.  
  159.  
  160. ┌───────────────────────────┐
  161. │  4. Program Requirements  │
  162. └───────────────────────────┘
  163.  
  164. To the best of my knowledge, this program will run on most any machine capable
  165. of running PCBoard 14.5+. I have personally tested and developed ULP on the
  166. following machines, with no problems:
  167.  
  168.         10 MHz 80286 computer (CompuAdd) with:
  169.            ∙ PCBoard 14.5a/D
  170.            ∙ 1 megabyte of motherboard memory with a 4 megabyte EMS card
  171.            ∙ 115 megabytes of MFM hard disk space
  172.            ∙ MS-DOS 5.0 with 4DOS 4.0 command interpreter
  173.            ∙ EGA graphics subsystem
  174.            ∙ NAS16550AFN serial port UARTs
  175.            ∙ US Robotics Courier V.32bis external modem
  176.  
  177.         33 MHz 80486 computer (CompuAdd Express) with:
  178.            ∙ PCBoard 14.5a/E3
  179.            ∙ 8 megabytes of motherboard memory
  180.            ∙ 210 megabytes of IDE hard disk space
  181.            ∙ MS-DOS 5.0 with 4DOS 4.0 command interpreter
  182.            ∙ SVGA graphics subsystem
  183.            ∙ NAS16550AFN serial port UARTs
  184.            ∙ US Robotics Courier V.32bis external modem
  185.  
  186.         33 MHz 80386 computer (Zeos) with:
  187.            ∙ 4 megabytes of motherboard memory
  188.            ∙ 130 megabytes of IDE hard disk space
  189.            ∙ MS-DOS 5.0 with 4DOS 4.0 command interpreter
  190.            ∙ DESQview 2.32 and QEMM 5.12
  191.            ∙ SVGA graphics subsystem
  192.            ∙ 16450 serial port UARTs
  193.            ∙ Everex Evercom 2400 baud internal modem
  194.  
  195. Other sysops that I have been in contact with have successfully implemented ULP
  196. on setups with CD-ROMs, networks (Ethernet and LANtastic) and other varying
  197. hardware.
  198.  
  199. ULP has been developed and tested using the following archiving and file
  200. checking software packages:
  201.  
  202.         ARJ 2.30 (by Robert Jung)
  203.         HYPER 2.5 (by P. Sawatzki and K. P. Nischke)
  204.         LHA 2.13 (by Haruyasu Yoshizaki)
  205.         LHarc 1.13c (by Haruyasu Yoshizaki)
  206.         PAK 2.51 (by NoGate Consulting)
  207.         PKPAK 3.61 (by PKWare)
  208.         PKZIP 1.10 (by PKWare)
  209.         PKZIP 1.93 Alpha (by PKWare)
  210.         ZOO 2.10 (by Rahul Deshi)
  211.         SCAN 8.3V86 (by McAfee Associates)
  212.         GIFTEST 4.0 Beta (by Dave Navarro)
  213.  
  214. The ULP system requires DOS 3.x or later, as it uses DOS SHARE-compatible file
  215. reads and writes, and uses the DOS PATH to find the archiving and other
  216. utilities.
  217.  
  218. ULP's memory requirements are relatively small (about 128K or so, plus the disk
  219. buffer allocated), but all programs are spawned or shelled, which reduces the
  220. free memory for the program being executed. It would be a good idea to have as
  221. much free conventional memory as possible (ULP itself cannot use EMS or XMS
  222. memory, and really couldn't use it I wanted to), especially if you use the ARJ
  223. compression system, which requires in the neighborhood of 280K itself to run.
  224.  
  225. ULPDB also should have as much conventional memory as possible, as it performs
  226. its sort in memory for optimal speed. If your duplication database is larger
  227. than 384KB (over 65,000 file CRCs), ULPDB will utilize a segmented sort
  228. algorithm, which is a little slower but capable of handling a database up to
  229. 6MB in size (over 1,000,000 file CRCs)! The memory sort will probably be fine
  230. for most systems, as 65,000 files would probably average out to be about 7,000
  231. to 8,000 typical archives. If anyone creates a database more than 6MB in size,
  232. please contact me as I can implement another routine that could handle up to a
  233. 96MB database...
  234.  
  235. A hard disk is required (and not very many BBSes don't have them) so it goes
  236. without saying (although I did anyway; someone is bound to ask...).
  237.  
  238. Obviously, the 286+ version of these programs that is available to registered
  239. users will not run on a 8088, 8086 or 80186 based computer. So don't try it (I
  240. haven't, so I don't have a clue what will happen...probably a lock-up...).
  241.  
  242.  
  243. ┌───────────────────┐
  244. │  5. Registration  │
  245. └───────────────────┘
  246.  
  247. The ULP system is not free; nor is ULP is crippled to force registration. ULP
  248. is fully functional, and will always remain so. The only variation with the
  249. registered copies is no time delay and beg message.
  250.  
  251. Why register? Besides a clean conscience, you will get two registration codes
  252. that will work for all future versions of ULP, and will remove the delay and
  253. message at the end of execution of each program.
  254.  
  255. Why two codes? Well, the first code is for the shareware version of ULP, and
  256. the second code is for the 286+ version of ULP that is made available only to
  257. registered users of ULP. This version is slightly smaller and faster than the
  258. shareware, 086+ version.
  259.  
  260. Also, registered users get a large time limit and unlimited downloading from
  261. my BBS, if they choose to do so...
  262.  
  263. The registration fee for your unique codes is $15 for non-commercial BBSes. The
  264. registration fee for commercial BBSes, defined if you run your BBS in the
  265. course of a commercial business, or your if BBS turns a profit, is $30. Other
  266. variations are available; refer to the file REGISTER.FRM for all registration
  267. options. Please print the file REGISTER.FRM and fill it out. You can print out
  268. the form by issuing the following command from the DOS prompt:
  269.  
  270.         TYPE REGISTER.FRM > PRN
  271.  
  272.  
  273. ┌───────────────────────────────────────┐
  274. │  6. License, Warranty and Disclaimer  │
  275. └───────────────────────────────────────┘
  276.  
  277. I'll keep this part short and sweet, and dispense with the legal-ese:
  278.  
  279.         License: You are allowed to use ULP for 30 days, after which you must
  280.            either register ULP or stop using it completely. ULP registration is
  281.            a license for your use of ULP; I retain ownership of the software. A
  282.            single registration applies to a single BBS system, regardless of
  283.            the number of computers used in the system. If you run two or more
  284.            distinct BBS systems on the same computer (with different names),
  285.            you require two or more ULP registrations. Refer to the registration
  286.            form for the currect pricing structure.
  287.  
  288.         Warranty: There isn't one. The only thing I'll guarantee is that ULP
  289.            will take up disk space, and will disappear when deleted.
  290.  
  291.         Disclaimer: I'm not responsible for anything bad that happens. ULP
  292.            works here, but I cannot be held responsible for it not working on
  293.            your computer or doing any damage to hardware or software.
  294.  
  295. If these aren't agreeable with you, then the best thing to do is delete ULP
  296. right now. I'll do my best to help any user (registered or not) that wants to
  297. use ULP, and I'll act on bug reports quickly, but I simply cannot and will not
  298. be responsible for anything bad, like lost data, disk crashes, or whatever
  299. else you can think of.
  300.  
  301.  
  302. ┌──────────────────────────────┐
  303. │  7. Principles of Operation  │
  304. └──────────────────────────────┘
  305.  
  306. Since the ULP system is made up of several inter-operating programs, this
  307. overview and concept explanation should help you understand how ULP is
  308. designed to be used.
  309.  
  310. *******************************************************************************
  311.      READ THIS SECTION VERY CAREFULLY, AS IT WILL MAKE LIFE MUCH EASIER!!!
  312. *******************************************************************************
  313.  
  314. I believe that all responsible BBS sysops verify all of their uploads prior to
  315. posting them, in order to protect both themselves and their users. ULP is
  316. designed with idea in mind. Most, if not all, sysops process uploads in one of
  317. two ways (listed with benefits and liabilities as I see them):
  318.  
  319.         1) Make all uploads private, processing them during a system event.
  320.  
  321.            BENEFITS:
  322.               ∙ Does not take up any on-line time on the user's part to
  323.                 process archives.
  324.               ∙ Allows the conversion of all archives to a default format,
  325.                 so that the BBS archives are consistent.
  326.               ∙ Allows the BBS to accept any archive format...face it, it's
  327.                 hard enough to get some of these weenies to upload, much
  328.                 less compress them the same way.
  329.  
  330.            LIABILITIES:
  331.               ∙ Files are not available immediately for download.
  332.               ∙ Does not catch duplicates or aged archives until after the
  333.                 user has uploaded them, and perhaps leads to abuse by
  334.                 clever (?) users. (It is assumed that these sysops still
  335.                 use the venerable 'PKUNZIP -T' in their PCBTEST.BAT...)
  336.  
  337.         2) Process (test) each upload online after the user uploads them.
  338.  
  339.            BENEFITS:
  340.               ∙ Catches duplicate, defective and aged archives while the
  341.                 user is online, denying him upload credits.
  342.               ∙ Files are available immediately for download if they are not
  343.                 made private in the PCBoard setup.
  344.  
  345.            LIABILITIES:
  346.               ∙ Takes up on-line time for a user, potentially adding to his
  347.                 long-distance phone bill, discouraging further uploading;
  348.                 this process is typically quite slow for large archives.
  349.               ∙ The archive format cannot be converted (a limitation of
  350.                 PCBoard), leaving many different archive formats in your
  351.                 BBS directories. Because of this, many sysops force users
  352.                 to use a specific format, which may or may not be consistent
  353.                 with other BBS's the user calls.
  354.  
  355. The ULP system takes the best of both of these methods of testing. ULP.EXE is
  356. an event-mode processor which will fully process every archive found in the
  357. source upload directory, including archive format conversion, and move the
  358. file and description to the destination directory. In the base setup, you MUST
  359. run ULP.EXE in your event to completely process all uploads to your system.
  360.  
  361. ULPTEST.EXE is an on-line processor, with a twist: it doesn't recompress the
  362. archive. It does absolutely nothing more than testing; this will greatly reduce
  363. the amount of on-line time the user is forced to waste waiting for file
  364. processing. The conversion process is handled by ULP during the system event.
  365.  
  366. Pay attention to this part:
  367.  
  368. PCBoard normally has two upload directories for each conference: a private and
  369. a public directory. When PCBoard invokes PCBTEST.BAT, the upload is in the
  370. private directory. If the archive fails the testing, it will remain there.
  371. However, if it passes, one of two things will occur depending upon your system
  372. setup; if you have made all uploads private, the file will remain in the
  373. private directory; if you have not made uploads private, it will be moved to
  374. the public directory.
  375.  
  376. There lies the rub: since ULPTEST.EXE only tests the archive, ULP.EXE must
  377. reprocess it (performing more elaborate tests and converting the archive
  378. format), and ULP.EXE is designed to move the file and description to a new
  379. location after testing, presumably to prevent users from getting to untested
  380. files.
  381.  
  382. If you have made all uploads private, then setup and configuration of ULP is a
  383. snap: the source directory is the private upload directory, and the destination
  384. is the public directory. However, if you want to allow users to get to the
  385. public upload directory, then you must make a SECOND upload directory (in
  386. DLPATH.LST, just like another directory) for ULP.EXE to move files to. In this
  387. case, the source directory would be the public directory that PCBoard has
  388. tossed the files into after testing, and the desination directory is the new
  389. upload directory you have created in the DLPATH.LST file. To illustrate the
  390. operation:
  391.  
  392.   MAKE ALL UPLOADS PRIVATE           │  ALL UPLOADS AVAILABLE AFTER TESTING
  393.   ───────────────────────────────────┼─────────────────────────────────────
  394.   2 directories:  C:\PRIVATE         │  3 directories:  C:\PRIVATE
  395.                   C:\PUBLIC          │                  C:\PARTIAL
  396.                                      │                  C:\FULL
  397.                                      │
  398.   User uploads a file, gets placed   │  User uploads a file, gets placed
  399.   in C:\PRIVATE by PCBoard.          │  in C:\PRIVATE by PCBoard.
  400.                                      │
  401.   ULPTEST.EXE tests it.              │  ULPTEST.EXE tests it.
  402.                                      │
  403.   PCBoard leaves file in C:\PRIVATE  │  If it passes, PCBoard moves it to
  404.                                      │  C:\PARTIAL; if it fails, PCBoard
  405.                                      │  leaves it in C:\PRIVATE
  406.                                      │
  407.   ULP.EXE reprocesses it and moves   │  ULP.EXE reprocesses it and moves it
  408.   it to C:\PUBLIC                    │  to C:\FULL
  409.  
  410. ULPTEST.EXE also has two modes of operation: normal and fast. The normal mode
  411. decompresses the files, performs file, duplication and age checking, and then
  412. deletes the extracted files and returns to PCBoard. The fast mode DOES NOT
  413. decompress the file; it firsts peforms an archive integrity check, then scans
  414. ARJ and ZIP archives directly for duplicate and age checking, and then returns
  415. to PCBoard (if the archive is not ARJ or ZIP, then normal mode is invoked). In
  416. fast mode, file checking (viruses, etc.) is left for ULP to do (which is why
  417. the above discussion regarding private/public directories is important).
  418.  
  419. ULPTEST.EXE will also accept a redirected ARJ or PKUNZIP listing text file
  420. named VERIFY.ULP as input to pre-verify an upload for a user, before the user
  421. actually spends his time uploading the file only to find out it won't pass the
  422. limits you set.
  423.  
  424.  
  425. ┌───────────────────┐
  426. │  8. Installation  │
  427. └───────────────────┘
  428.  
  429. GENERAL (REQUIRED!):
  430. ───────────────────
  431. Make a subdirectory on your hard drive. For the purposes of this document,
  432. we'll call it "C:\ULP". Unarchive the ULP distribution archive into this
  433. subdirectory. You've more than likely already made it this far, if you're
  434. reading this file. <grin>
  435.  
  436. The ULP system opens several files at once for various reasons. I would
  437. recommend that you have a minimum of FILES=40 in your system CONFIG.SYS file
  438. for a single-node system, since ULPTEST is run in conjunction with PCBoard.
  439.  
  440. If you are running PCBoard under a network or a multitasking operating system,
  441. you should already have DOS's SHARE.EXE loaded. You must have SHARE loaded in
  442. order to take advantage of the file sharing and locking methods used by the ULP
  443. programs to prevent data loss. (If you are running a single-node system without
  444. a multitasker, SHARE is not needed).
  445.  
  446. Edit the configuration file to suit your needs. Proper configuration will
  447. require you to refer to this section, the previous section and the section
  448. titled "Configuration", which has an in-depth explanation of each configuration
  449. parameter and its function. It would probably be wise to fire up your printer
  450. for this document...
  451.  
  452. For this document, we'll assume the name of your configuration file is
  453. "ULP.CFG".
  454.  
  455. Note that for any of the ULP programs, you can obtain a limited program syntax
  456. screen simply by executing the program with no arguments.
  457.  
  458. FOR EVENT-MODE UPLOAD PROCESSING (REQUIRED!):
  459. ────────────────────────────────────────────
  460. As a minimum setup, you MUST run ULP as an event-mode processor, as ULP.EXE
  461. handles all of the CRC database updating, archive conversion, file and
  462. description moving, archive information line computation, and other features.
  463.  
  464. Further, ULP requires that you have 2 upload disk directories and 2 upload
  465. DIRxx files. They can be either a private/public setup or 2 public directories
  466. setup, as described below (and in the theory section):
  467.  
  468.       - PRIVATE/PUBLIC SETUP:  This setup will not allow users to get to any
  469.         archive that has not been fully processed. In PCBSETUP, under Main
  470.         Board Configuration (and any other conferences you want ULP to
  471.         process), make all uploads private. Define a private upload
  472.         directory and a private DIRxx file (which should have already been
  473.         done, since all sysop-only uploads are placed here by PCBoard). Also
  474.         create a public upload directory and public DIRxx file. This is how I
  475.         have my system setup.
  476.  
  477.       - TWO (2) PUBLIC DIRECTORY SETUP:  This setup will allow users to
  478.         download archives from both public upload directories; one directory
  479.         has been tested, and the other has been fully tested and converted.
  480.         In PCBSETUP, under Main Board Configuration (and any other
  481.         conferences you want ULP to process), define a private upload
  482.         directory and a private DIRxx file, and a public upload directory
  483.         and a public DIRxx file (this is where PCBoard will place all new
  484.         non-private uploads since you did not make them private). Also
  485.         create a SECOND public upload directory and public DIRxx file, and
  486.         add these to the DLPATH.LST, DLFILE and DLFILE.LST files.
  487.  
  488. To process your uploads during your system event, add the following lines to
  489. your EVENT.SYS file (be sure to change the drive and path as necessary):
  490.  
  491.         C:
  492.         CD \ULP
  493.         ULP -CULP.CFG
  494.  
  495. ULP will lock the CRC-32 database, preventing any other program from accessing
  496. them (ULPTEST, specifically). Therefore, I strongly suggest you have all nodes
  497. down when running ULP.
  498.  
  499. FOR THE INTEGRATED CRC-32 DUPLICATION CHECKER (HIGHLY RECOMMENDED):
  500. ───────────────────────────────────────────────────────────────────
  501. Initially, you must create the CRC database from scratch. If you have mostly
  502. ZIP and ARJ files, then this should be very quick (on the order of 10 minutes
  503. per 1000 archives for my 10MHz AT clone). After you edit the configuration
  504. file, go to the ULP directory and this command will create and compile your
  505. database of your current downloadable file base:
  506.  
  507.         ULPDB -CULP.CFG -A@C:\PCB\GEN\DLPATH.LST
  508.  
  509. The '@' symbol (a '!' may also be used) indicates to ULPDB that the argument is
  510. a list file, not a directory. The list file must have one path per line, and
  511. each path must end with a trailing backslash. In general, you may simply use
  512. your PCBoard DLPATH.LST file, unless you are indexing your downloads.
  513.  
  514. If you would like to include any off-line files in your CRC database (or have
  515. to add files originally not included in the database) you can temporarily copy
  516. your offline files to a temp directory (for the sake of argumentation, let's
  517. call it "C:\TEMP\"; note the trailing backslash). You can then add and compile
  518. them into the CRC database with the following command (no list symbol!):
  519.  
  520.         ULPDB -CULP.CFG -AC:\TEMP\
  521.  
  522. Note that if you want to add a CD-ROM, or any other write-protected storage
  523. system, you will have to use the WORK_DIR configuration parameter for any
  524. ADD function on this storage media.
  525.  
  526. After you've added the offline files, just delete them from the disk, and if
  527. someone uploads a file that you already have, it will be rejected.
  528.  
  529. Once you have your database built, you should also perform maintenance on the
  530. CRC database files once per day. This will compile any new CRCs from the day's
  531. uploads into the main database, and remove any added by ULPTEST. This is not
  532. required to be done every day, but it will speed the duplicate checking in ULP
  533. and ULPTEST. To perform database maintenance, add the following line to your
  534. PCBoard EVENT.SYS after the event-mode processor has run:
  535.  
  536.         C:                    ──────┐        These lines are repeated
  537.         CD \ULP                     ├─────   for clarity.
  538.         ULP -CULP.CFG         ──────┘
  539.         ULPDB -CULP.CFG -S
  540.  
  541. ULPDB also locks the CRC-32 database, preventing any other program from
  542. accessing them. I strongly suggest you have all nodes down when running ULP.
  543.  
  544. IF YOU USE PCBOARD'S 'TESTFILE.EXE' UTILITY:
  545. ────────────────────────────────────────────
  546. NOTE: If you are unfamiliar with the operation of PCBTEST.BAT, you will need
  547. to refer to the PCBoard manual on pages 200-202 for an explanation of
  548. PCBTEST.BAT and TESTFILE.EXE
  549.  
  550. In general, the use of TESTFILE.EXE is not necessary with ULPTEST. ULPTEST is
  551. capable of handling most any situation that arises. However, if you must use
  552. TESTFILE.EXE for some reason, in order to take advantage of the upload
  553. pre-verification abilities of ULPTEST, you must add the extension 'ULP' to the
  554. TESTFILE.EXE extension list. This will allow the file 'VERIFY.ULP' to pass
  555. through the filter created by TESTFILE so that ULPTEST may scan it. You will
  556. also have to add 'EXE' to your extension list if you use TESTFILE.EXE, to allow
  557. SFX archives to be processed by ULPTEST.
  558.  
  559. FOR THE ONLINE UPLOAD TESTING (OPTIONAL):
  560. ─────────────────────────────────────────
  561. Online testing of archives can greatly reduce the amount of garbage your BBS
  562. can pick up from user's uploading defective archives, ancient files, and
  563. duplicates. The theory that ULPTEST uses is to simply check the archive AS
  564. FAST AS IT CAN for archive integrity, duplication, and age, and then return
  565. the user to greater and better things. ULP.EXE will handle everything else
  566. during the system event.
  567.  
  568. To use ULPTEST.EXE for on-line testing of archives, use the following command
  569. line in PCBTEST.BAT (refer to the sample PCBTEST.BAT included in the ULP
  570. distribution archive, and the PCBoard manual, to get the general logic of
  571. PCBTEST.BAT's operation). Note the explicit paths to the ULPTEST executable and
  572. the ULP configuration file:
  573.  
  574.         C:\ULP\ULPTEST -CC:\ULP\ULP.CFG -F%1 -M%2
  575.  
  576. ULPTEST will garner any other information that is required for operation from
  577. the PCBOARD.DAT and PCBOARD.SYS files. In most installations, ULPTEST will
  578. locate these two system files via the environment variables PCBDAT, PCBDRIVE
  579. and PCBDIR. If you have the environments variables disabled (using the /NOENV
  580. switch), you can define the location of these files by adding the -P parameter:
  581.  
  582.         C:\ULP\ULPTEST -CC:\ULP\ULP.CFG -F%1 -M%2 -PC:\PCB\NODE1\
  583.  
  584. Or, or you provide the port and node number information directly to ULPTEST by
  585. using the -N, -I, -A and -B command switchs:
  586.  
  587.         C:\ULP\ULPTEST -CC:\ULP\ULP.CFG -F%1 -M%2 -N5 -I4 -A3F8 -B38400
  588.  
  589. where -N is the node number, -I is the port IRQ line, -A is the port base
  590. address and -B is the baud rate of the port. ULPTEST defaults to using hardware
  591. handshaking; if there is a need, I will add the ability to select XON/XOFF or
  592. RTS/CTS handshaking in the future.
  593.  
  594. ULPTEST will return a DOS errorlevel of 0 if the archive is OK, and an
  595. errorlevel of 1-9 if there was an error (depending on the error). This allows
  596. the PCBTEST.BAT batch file to branch based upon the results of the ULPTEST. The
  597. appendix to this document lists all of the DOS errorlevels set by various ULP
  598. programs.
  599.  
  600. ULPTEST also creates the requires PCBPASS.TXT and PCBFAIL.TXT for PCBoard to
  601. determine if the archive passed or not.
  602.  
  603.  
  604. ┌────────────────────┐
  605. │  9. Configuration  │
  606. └────────────────────┘
  607.  
  608. The sample configuration file included in the distribution archive is heavily
  609. commented, but some additional information is provided below:
  610.  
  611. GENERAL PARAMETERS:
  612. ───────────────────
  613. REG_CODE
  614.     The registration code EXACTLY as provided to you on your registration
  615.     letter. If this is an unregistered version, comment out this line. Note
  616.     that this is case-sensitive, as the serial number, BBS name and sysop name
  617.     are all encrypted into this code.
  618.  
  619. BBS_NAME
  620.     The BBS name EXACTLY as provided to you on your registration letter. If
  621.     this is an unregistered version, comment out this lines. Note that this is
  622.     case-sensitive!
  623.  
  624. SYSOP_NAME
  625.     The sysop name EXACTLY as provided to you on your registration letter. If
  626.     this is an unregistered version, comment out this line. You get the
  627.     picture by now...
  628.  
  629. DISK_BUFFER
  630.     The size of the disk I/O buffer you wish to allocate in bytes (valid
  631.     values are between 512 bytes and 32768 bytes). Optimal performance is
  632.     obtained with a value that is a multiple of 2048 bytes, since this is the
  633.     size of a typical hard disk cluster. 4096 seems to be a good number for
  634.     me, although a larger size will improve performance somewhat. If you find
  635.     yourself running out of memory when executing archivers or file checking
  636.     programs, reduce this number to increase your available memory. If no value
  637.     is specified, the disk buffer will default to 4096 bytes.
  638.  
  639. LOG_FILE
  640.     All of the ULP programs will write process and error information to a log
  641.     file, if desired. This is the path/filename of the log file for ULP to
  642.     record its activities. Comment out if you don't want any disk logging.
  643.  
  644. LOG_MODE
  645.     If you want ULP and ULPTEST to record their statistics and finding for each
  646.     archive processed to the log file, use the VERBOSE keyword. If you only
  647.     want errors and summary statistics logged to disk, use the TERSE keyword or
  648.     comment the line out. VERBOSE mode will quickly produce a large log file,
  649.     but gives much insight into what ULP is doing and why a particular upload
  650.     failed.
  651.  
  652. INT_DESC
  653.     ULP can extract and insert FILE_ID.DIZ and DESC.SDI internal description
  654.     files into the DIRxx files. If you want ULP to insert internal description
  655.     files, type YES; if not, type NO or comment the line out.
  656.  
  657. DESC_LIMIT
  658.     If ULP is to insert internal description files, the following parameter is
  659.     the maximum number of lines that ULP will insert from the description file.
  660.     This defaults to 10 if the line is commented out. Clark Development Company
  661.     (the developer of PCBoard and FILE_ID.DIZ) has defined that a FILE_ID.DIZ
  662.     file should have no more than 10 lines, but ULP will insert any number of
  663.     lines.
  664.  
  665. WORK_DIR
  666.     If you want ULPDB to use a specific directory for decompressing archives
  667.     while generating the database, place the pathname (including the trailing
  668.     backslash). This directory must exist! If you do not desire to use a
  669.     specific directory, comment it out (ULPDB will extract at its current
  670.     location on disk). I would not recommend using a RAM disk, unless you are
  671.     sure that extracted archives will fit on the disk. If an archive will not
  672.     fit onto a RAM disk, ULPDB will flag it as a bad archive in the log file
  673.     and not record its CRCs. The primary purpose for this purpose is to allow
  674.     sysops with CD-ROM, WORM or other write-protected media to add those
  675.     archives to the CRC-32 database.
  676.  
  677. ERR_DISP
  678.     This defines how ULP dispositions archives found to have an error other
  679.     than a file check failure. These kind of errors take the form of ZIP CRCs,
  680.     etc., and are not potentially system damaging. Under some conditions,
  681.     these archives can be restored. If you want ULP to delete the archive and
  682.     description, enter DELETE; if you want ULP to rename the archive to a .ERR
  683.     extension, type RENAME or comment the line out.
  684.  
  685. VIRUS_DISP
  686.     This defines how ULP dispositions archives that fail a file check, such as
  687.     a virus scan. These errors are (obviously) potentially system-damaging. (I
  688.     wouldn't keep them if I were you.) If you want ULP to delete the archive
  689.     and description, type DELETE; if you want ULP to rename the archive to a
  690.     .VRS extension, type RENAME or comment the line out.
  691.  
  692. SCREEN_ARC
  693.     If you want ULP and ULPTEST to screen ZIP archives for DOS reserved
  694.     keywords prior to unpacking them, type YES or comment the line out.
  695.     Otherwise, type NO. This will prevent someone from hanging your system by
  696.     hex-editing an ARJ or ZIP archive and replacing a filename with a DOS
  697.     reserved device keywords (such as COMn, LPTn, PRN, CLOCK$, etc.).
  698.  
  699. VIEWER
  700.     The command line for an ASCII file viewing (or editing) utility, such as
  701.     Vernon Buerg's venerable LIST utility. This will be called by ULPDB to
  702.     facilitate viewing of an archive information file generated for the
  703.     purposes of archive review. Place the @FILES@ variable where the filename
  704.     is to be entered on the utility's command line.
  705.  
  706. UPLOAD DIRECTORIES:
  707. ───────────────────
  708. Each pair of upload directories (one source, and one destination), is denoted
  709. by UL_DIR x, where x is a sequential number. Up to 10 directory pairs can be
  710. processed by ULP. The next 6 keywords are REQUIRED after the UL_DIR statement;
  711. do not comment any of them out or insert other parameters or comments in
  712. between them:
  713.         UL_DIR      = denotes the beginning of a pair of upload directories
  714.                       definition.
  715.         SOURCE_PATH = the directory where the uploads are placed by PCBoard.
  716.                       This must include the trailing backslash! NOTE: if you
  717.                       are using the 2 public directory setup, this parameter
  718.                       will be the INITIAL public upload directory; the same
  719.                       goes for the next two parameters).
  720.         SOURCE_LIST = the source upload directory list file that contains the
  721.                       archive descriptions, including the path.
  722.         SOURCE_HDR  = the number of lines to ignore at the beginning of the
  723.                       source upload directory list file (for headers,
  724.                       detachable header filespecs, etc.)
  725.         DEST_PATH   = the destination directory where the uploads are placed by
  726.                       ULP after successful processing. This must include the
  727.                       trailing backslash!
  728.         DEST_LIST   = the upload directory list file that contains the archive
  729.                       descriptions, including the path. ULP will append this
  730.                       file with the descriptions of successfully processed
  731.                       files.
  732.         DEST_HDR    = the number of lines to ignore at the beginning of the
  733.                       upload directory list file (for headers, detachable
  734.                       header filespecs, etc.)
  735.  
  736. AGE-LIMIT CHECKING:
  737. ───────────────────
  738. AGE_CHK
  739.     If you want ULP to fail an archive based on the date of its most recent
  740.     file, type YES; if not, type NO or comment the line out.
  741.  
  742. AGE_LIMIT
  743.     The maximum age in months, that you will accept for an upload. (If the
  744.     ERR_DISP is set to RENAME, it will be renamed to a .ERR extension).
  745.  
  746. ARCHIVING CONTROL FLAGS:
  747. ────────────────────────
  748. ARC_CVT
  749.     If you want ULP to convert the archive to a default archiving format of
  750.     your choice, type YES; if not, type NO or comment the line out. This only
  751.     affects the 'outside' level of the archive. This flag has no affect on the
  752.     conversion of internal, nested archives.
  753.  
  754. ARC_NEST_CVT
  755.     If you want ULP to convert any internal archives found inside the archive
  756.     to your default archiving format, type YES; if not, type NO or comment the
  757.     line out, and they will be rearchived using the original archiving method
  758.     (using the original extension, even if it isn't that archiver's default
  759.     extension). The benefit of converting archives is it may save some disk
  760.     space; on the down side, it will potentially hose automatic installation
  761.     programs/batch files that may be contained within the archive.
  762.  
  763. SFX_CVT
  764.     If you want ULP to convert a self-extracting (SFX) archive to your default
  765.     archiving format, type YES; if not, type NO or comment the line out. If NO
  766.     is selected, then the archive will be processed, and then left alone if it
  767.     passes (NOT re-archived!). The reasoning for this is the LHA autostart
  768.     batch files and other similar features; they are usually used for novice
  769.     users and for automatic installation. By converting SFX archives, this may
  770.     save some disk space, but can cause inconveniences. For example, if you
  771.     don't have PKZ110.EXE on your BBS, a novice user has no way of obtaining
  772.     the PKZIP utilities from your BBS.
  773.     * NOTE: If there is a BBS ad in a SFX archive, and SFX_CVT is set to 'no',
  774.         the ad will remain in the archive.
  775.  
  776. KEEP_AV
  777.     If you want ULP to keep ZIP archives with authenticity verification stamps
  778.     (-AV) regardless of the other archiving control flags, then set this to
  779.     'yes', or comment it out. If you set this flag to 'no', then the archive
  780.     will be recompressed per the other control flags.
  781.     * NOTE: If there is a BBS ad in a -AV stamped archive, and KEEP_AV is set
  782.         to 'yes', the ad will remain in the archive.
  783.  
  784. KEEP_ENV
  785.     If you want ULP to keep ARJ archives with security envelopes (similar to a
  786.     ZIP -AV) regardless of the other archiving control flags, then set this to
  787.     'yes' or comment it out. If you set this flag to 'no', then the archive
  788.     will be recompressed per the other control flags.
  789.     * NOTE: If there is a BBS ad in a secured archive, and KEEP_ENV is set to
  790.         'yes', the ad will remain in the archive.
  791.  
  792. ARCHIVER DEFINITIONS:
  793. ─────────────────────
  794. Each archiver is denoted by ARCHIVER x, where x is a sequential number. Up to
  795. 10 archivers can be executed by ULP. ULP is capable of automatically detecting
  796. ARC, ARJ, HYP, LZH, PAK, ZIP and ZOO archives. The next 6 keywords are required
  797. after the ARCHIVER statement; do not comment any of them out or insert other
  798. parameters or comments in between them. I would also advise against changing
  799. the command options I have set, unless you have need to do so. Some are there
  800. to ensure uninterrupted processing (e.g. /m1 in LHA). Any other archiver can be
  801. added, if desired; the only requirement is that the archiver must return a DOS
  802. errorlevel so that ULP can determine if it ran properly. If you do not
  803. explicitly define the path to your file checking program(s), it must in a
  804. directory included in the DOS PATH environment variable.
  805. * NOTE: The ARJ and ZIP formats MUST be included for ULP to function properly!
  806.         ARCHIVER    = denotes the beginning of an archiving program
  807.                       definition.
  808.         ARC_EXT     = the extension for this particular archiving format.
  809.         ARC_PRIMARY = if this is the default archiving format you use on your
  810.                       BBS, type YES; if not, type NO.
  811.         ARC_PACK    = the command line to pack archives, including all
  812.                       command-line switches desired. Place the variable
  813.                       @ARCHIVE@ where the filename is to be inserted in the
  814.                       command line and @FILES@ where the filespec is to be
  815.                       inserted. If you want a comment to be inserted, you must
  816.                       include it in the command-line switches. This cannot
  817.                       be a batch file! (DOS re-direction is allowed)
  818.         ARC_UNPACK  = the command line to unpack archives, including all
  819.                       command-line switches desired. Place the variable
  820.                       @ARCHIVE@ where the filename is to be inserted in the
  821.                       command line. This cannot be a batch file! (No DOS
  822.                       re-direction allowed)
  823.         ARC_TEST    = the command line to test archives, including all
  824.                       command-line switches desired. Place the variable
  825.                       @ARCHIVE@ where the filename is to be inserted in the
  826.                       command line. This cannot be a batch file! (No DOS
  827.                       re-direction allowed)
  828.         ARC_ERR     = the errorlevel that the archiver returns upon success.
  829.                       This information should be available in the program's
  830.                       documentation.
  831.  
  832. UNCOMPRESSED FILES TO PROCESS:
  833. ──────────────────────────────
  834. PROC_EXT
  835.     ULP can process selected uncompressed uploads, using this option. Up to 10
  836.     uncompressed file types can be specified by extension. Do not use any
  837.     compression format extensions (ARJ, ZIP, etc.)! Any files that are uploaded
  838.     with one of these extensions and could not be identified by signature will
  839.     be file-checked, duplicate-checked, and compressed using your default
  840.     archiving method. If you do not want to use this feature, simply remove or
  841.     comment out these lines. It probably is not a good idea to have EXE as an
  842.     extension to compress, since ULP is not able to detect ARC, HYP or ZOO
  843.     self-extractors, and they would be packed as an uncompressed archive.
  844.  
  845. FILE-CHECKING (VIRUS SCANNING, ETC.):
  846. ─────────────────────────────────────
  847. Each file checker is denoted by FILE_CHECKER x, where x is a sequential number.
  848. Up to 10 file checking programs can be executed by ULP. The next 2 keywords are
  849. required after the FILE_CHECKER statement; do not comment them them out or
  850. insert other parameters or comments in between them. Any kind of file checker
  851. may be used, such as a virus checker, or a 3rd party CRC duplication checker,
  852. if desired. If you do not explicitly define the path to your file checking
  853. program(s), it must in a directory included in the DOS PATH environment
  854. variable. The only requirement is that it must return a DOS errorlevel,
  855. otherwise ULP has no clue if there was an error or not.
  856.         FILE_CHECKER = denotes the beginning of a file-checker definition.
  857.         FILE_CHK_CMD = the command line to execute each file checker,
  858.                        including all command-line switches. Place the variable
  859.                        @FILES@ where the filespec is to be placed on the
  860.                        command line. This cannot be a batch file! (No DOS
  861.                        re-direction allowed)
  862.         FILE_CHK_ERR = the errorlevel that the file checking program returns
  863.                        upon success. This information should be available in
  864.                        the program's documentation.
  865.  
  866. GIF FILE CHECKING
  867. ─────────────────
  868. Each GIF file checker is denoted by GIF_CHECKER x, where x is a sequential
  869. number. Up to 5 GIF file checking program(s) can be executed by ULP. In
  870. addition, do not use the GIF file checking program's internal duplicate
  871. checking or file handling abilities, if any. ULP and ULPTEST will take care of
  872. these operations. The next 2 keywords are required after the GIF_CHECKER
  873. statement; do not comment them out or insert other parameters or comments in
  874. between them.
  875.         GIF_CHECKER = denotes a new file checking/virus program definition.
  876.         GIF_CHK_CMD = the command line to execute each GIF file checker,
  877.                       including all command-line switches. Place the variable
  878.                       @FILES@ where the filespec is to be placed on the command
  879.                       line. This cannot be a batch file! (No DOS re-direction
  880.                       allowed)
  881.         GIF_CHK_ERR = the errorlevel that the GIF file checking program returns
  882.                       upon success. This information should be available in the
  883.                       program's documentation.
  884.  
  885. ARCHIVE INFORMATION LINE:
  886. ─────────────────────────
  887. INFO_LINE
  888.     ULP can add a single line of archive information for the benefit of your
  889.     users. The format is completely defined by you. If you want ULP to add a
  890.     single line to the archive description, type YES; if not, type NO or
  891.     comment the line out. Note that the statistics generated by ULP will not
  892.     include any FILE_ID.DIZ or DESC.SDI files found in the archive.
  893.  
  894. INFO_INDENT
  895.     The column where the | marker goes in your directory listing setup. The
  896.     standard PCBoard setup indents to column 32.
  897.  
  898. INFO_FORMAT
  899.     The format that you would like for the information line (do not include
  900.     the '|' character or the space; ULP will add those). This format is
  901.     completely configuration by the user; any ASCII character can be used. To
  902.     include specific information compiled by ULP, just add the variables. The
  903.     legal variables are (must be in all caps):
  904.         @#@      = Number of files in the archive (and nested archives)
  905.         @NEWEST@ = Date of the newest file in the archive
  906.         @OLDEST@ = Date of the oldest file in the archive
  907.         @BYTES@  = The total number of bytes (uncompressed) in the archive
  908.  
  909. ULPTEST TESTING:
  910. ────────────────
  911. TEST_MODE
  912.     This defines how ULPTEST processes an archive. NORMAL indicates a full
  913.     test is to be performed, identical to the ULP event processing except that
  914.     the archive formats are not converted or recompressed (this is a
  915.     limitation of PCBoard). FAST indicates a fast test in which the archive is
  916.     scanned for archive integrity, duplicates, and age without unpacking the
  917.     archive (ARJ and ZIP files only). If this mode is used, it should be held
  918.     for later processing by ULP so that it can be file-checked for viruses,
  919.     etc. Also, FAST mode can only 'see' one level deep in the archive. If you
  920.     have a slow computer and/or hard disk, FAST mode would be preferable for
  921.     your users when large archives are uploaded. If you comment this line out,
  922.     NORMAL mode is assumed. I recommend you use NORMAL mode, and then set a
  923.     limit with the next parameter for when FAST mode will be utilized.
  924.  
  925. TEST_LIMIT
  926.     If NORMAL mode is used, the archive's file size will first be compared
  927.     against this limit (in kilobytes). If it is larger than this number of
  928.     kilobytes, it will be forced into FAST mode to speed the process and
  929.     prevent wasting the user's online time. Entering 0, or commenting the line
  930.     out will disable this feature, resulting in NORMAL mode being used at all
  931.     times. If TEST_MODE is set to FAST, this parameter has no effect. For my
  932.     system, a good value is 200 kilobytes, as anything much bigger than this
  933.     takes quite awhile to decompress, test, and delete the files extracted.
  934.  
  935. COMM_IO
  936.     If you want ULPTEST to output status information to the user on-line, set
  937.     the following to YES; if not, enter NO or comment the line out. ULPTEST
  938.     supports IRQ2-7 and the port address is completely user-definable.
  939.  
  940. BBS ADS FILE REMOVAL:
  941. ─────────────────────
  942. ADS_CHK
  943.     If you want ULP to remove known BBS ads from new uploads during processing,
  944.     type YES; if not, type NO or comment the line out.
  945.  
  946. ADS_DB
  947.     The directory path and name for the BBS ads database. This database can be
  948.     updated by the sysop by using the ULPADS utility (see section 11 of this
  949.     document), freeing the sysop from being reliant on me to maintain the ads
  950.     database. If you find a large number of new BBS ad files, please upload
  951.     them to my board for inclusion into my master ads database.
  952.  
  953. CRC-32 DUPLICATE FILE CHECKING:
  954. ───────────────────────────────
  955. DUPE_CHK
  956.     If you want ULP to use its internal CRC-32 duplication checking, type YES;
  957.     if not, type NO or comment the line out. If you want to use a third-party
  958.     duplication checker, such as ZDCS, you can add it as a file checker
  959.     (above), providing it returns DOS errorlevels so ULP can detect its
  960.     success/failure. I would strongly suggest using ULP's, as it is fast and
  961.     compact, not to mention integrated, eliminating the time to shell to disk
  962.     for each file in each archive to be tested.
  963.  
  964. DUPE_LIMIT
  965.     The maximum percentage of duplication allowed for a file to pass. Anything
  966.     larger will fail (0 will allow no duplications at all, while 100 will
  967.     allow everything to pass). I would suggest this number be set to at least
  968.     50, as some program authors don't modify every file, especially with
  969.     maintenance releases.
  970.  
  971. DUPE_DB
  972.     The path and name for the CRC-32 database file. It's a good idea to keep
  973.     the database, index, and new data files all together, just to make things
  974.     easier.
  975.  
  976. DUPE_IDX
  977.     The path and name for the CRC-32 database file index.
  978.  
  979. DB_VALIDATE
  980.     If you want ULP and ULPTEST to validate the CRC-32 database before using
  981.     it, comment the line out or answer 'YES', otherwise answer 'NO'. The
  982.     validation checks verify the contents of the database index pointers and
  983.     the main (compiled) portion of the CRC database. In the event a failure
  984.     occurs, ULP and ULPTEST will abort. At this time, there is no recourse
  985.     other than to rebuild the database or restore a valid backup copy of the
  986.     database (back up regularly!).
  987.  
  988.  
  989. ┌────────────────────────┐
  990. │  10. Manual Operation  │
  991. └────────────────────────┘
  992.  
  993. While the ULP system is mostly automatic, there are occasions where some
  994. operations may have to be done manually:
  995.  
  996. ULP:
  997. ────
  998. During the course of operation, ULP will rename archives that have been found
  999. to be defective in some manner according to the following convention:
  1000.  
  1001.     .UNK    Unknown archive format
  1002.     .DOS    DOS reserved keyword found in archive
  1003.     .ERR    Error occurred while unpacking archive (archive integrity failure)
  1004.     .VRS    Error found while file checking archive file (virus, etc.)
  1005.     .DUP    Excessive duplicate files contained in archive
  1006.     .PCK    Error occurred while repacking archive file
  1007.     .AGE    Age limit exceeded by archive file
  1008.     .BAD    Error found while testing GIF file
  1009.  
  1010. I would enter these extensions in your UPSEC file, as ULP will automatically
  1011. pass over any file with these extensions, presuming that they are defective
  1012. archives. Doing so will prevent a user from uploading a file with one of these
  1013. "reserved" extensions.
  1014.  
  1015. If you feel that these files are acceptable after reviewing them, you can force
  1016. them to be accepted by adding the command-line switch -O (for override) to the
  1017. ULP command line, e.g.:
  1018.  
  1019.     ULP -Culp.cfgf -O
  1020.  
  1021. This will accept the archives regardless of duplication or age limits. It will
  1022. not override unpacking, packing, integrity and virus errors, however, for the
  1023. safety of your board and your users.
  1024.  
  1025. ULPDB:
  1026. ──────
  1027. If a file has been failed for some reason, you can view the contents of the
  1028. archive using the -V command switch with ULPDB. This will scan the archive, and
  1029. generate a report of the results, which are indicative of why it failed. For
  1030. example:
  1031.  
  1032.     ULPDB -CULP.CFG -VC:\PRIVUL\BAD.ZIP
  1033.  
  1034. This will produce a report of the archive BAD.ZIP located in the specified
  1035. path. This can be useful in determining if an archive that failed duplication
  1036. should be removed or should be accepted anyway, and similar reasons.
  1037.  
  1038.  
  1039. ┌──────────────────────────┐
  1040. │  11. BBS Ads and ULPADS  │
  1041. └──────────────────────────┘
  1042.  
  1043. The ULP system includes a BBS ad removal feature based on CRC-32 calculation of
  1044. the file contents and other data. In this fashion, ULP can detect a known ad
  1045. file despite the file name and date.
  1046.  
  1047. In order for sysops to be able to 'keep up' with new ads produced by the weenie
  1048. sysops who insert the @!&*#%$ things, I have included a utility called ULPADS
  1049. that can scan a BBS ad file, and update the BBS ads with it's information.
  1050. Don't worry about duplication, as part of the process is to purge duplicate BBS
  1051. ad info. The command-line syntax for the ULPADS.EXE program is simply:
  1052.  
  1053.     ULPADS -Ddatabase.ad -Fbbs.ad
  1054.  
  1055. where 'database.ad' is the full path and filename for the BBS ads database, and
  1056. 'bbs.ad' is the path and filename for the BBS ad file to be added to the ads
  1057. database.
  1058.  
  1059. I would greatly appreciate your uploading of any new BBS ad files that you may
  1060. collect over time to my BBS so I can update the master listing that I include
  1061. with the ULP distribution archive. Please refer to the top of this document for
  1062. my BBS number.
  1063.  
  1064.  
  1065. ┌───────────────┐
  1066. │  12. Support  │
  1067. └───────────────┘
  1068.  
  1069. If you require support for ULP, I can be contacted by any of the following
  1070. means:
  1071.  
  1072.     ∙ Fidonet Netmail addressed to Stacy Smith, node 1:276/112 (aka 1:276/100)
  1073.     ∙ Intelec Shareware conference
  1074.     ∙ Intelec PCBoard conference
  1075.     ∙ Salt Air (PCBoard support BBS)
  1076.     ∙ The ULP Support conference on my BBS (listed at the top of this
  1077.         document).
  1078.  
  1079.  
  1080. ┌─────────────────────────┐
  1081. │  13. The Future of ULP  │
  1082. └─────────────────────────┘
  1083.  
  1084. ULP will be supported as long as I'm in the BBSing business (which will be
  1085. quite a while...once it's in your blood, you can never shake it <grin>). The
  1086. ULP system will be rapidly expanding it's features so it will be your first
  1087. choice in BBS upload processors. Some current plans:
  1088.  
  1089.       ∙ Incorporate code to handle archives containing explicit paths.
  1090.       ∙ Write a configuration program to ease the configuration process.
  1091.       ∙ Add the ability to preprocess files prior to file checking them;
  1092.         for example, decompress executables that have been PKLite'd.
  1093.       ∙ Support other BBS software directory listing formats.
  1094.  
  1095. If you have any other suggestions, or want other archivers supported, please
  1096. contact me by U.S. snail-mail or on my BBS at the number at the top of this
  1097. document.
  1098.  
  1099. Thanks for giving ULP a try!
  1100.  
  1101.  
  1102. ┌────────────────────────────────┐
  1103. │  Appendix A:  DOS Errorlevels  │
  1104. └────────────────────────────────┘
  1105.  
  1106. The errorlevels returned to DOS by the ULP system programs are consistent
  1107. among all of the programs (primarily with the error conditions); the following
  1108. is a list of the errorlevels than can be returned by the ULP programs, along
  1109. with which programs return the codes:
  1110.  
  1111.         0       Successful execution (ULPTEST, ULPDB, ULPADS)
  1112.         0       Successful execution, archives were processed (ULP)
  1113.         1       Successful execution, nothing to do (ULP)
  1114.         1       Unknown archive format (ULPTEST)
  1115.         2       DOS reserved keyword found in archive (ULPTEST)
  1116.         3       Error unpacking archive (archive integrity) (ULPTEST)
  1117.         4       Error file checking archive files (virus, etc.) (ULPTEST)
  1118.         5       Error duplicate checking archive files (ULPTEST)
  1119.         7       Age limit exceeded by archive files (ULPTEST)
  1120.         9       Bad GIF file (ULPTEST)
  1121.         99      Help screen (executing a program with no or an insufficient
  1122.                    number of arguments) (All)
  1123.         100     Could not close all open files (ULP, ULPTEST, ULPDB)
  1124.         101     Unknown command line parameter (All)
  1125.         102     Config file not found (All)
  1126.         103     Invalid config file format (All)
  1127.         104     Excessive number of command line parameters defined for
  1128.                    file checker (maximum number of parameters is 10) (ULP)
  1129.         105     Excessive number of command line parameters defined for
  1130.                    archiver (max is 10) (ULP, ULPTEST, ULPDB)
  1131.         106     Excessive number of words defined in archive information
  1132.                    line (max is 10) (ULP)
  1133.         107     No primary archiver defined (ULP)
  1134.         108     Invalid disk buffer size (All)
  1135.         109     Upload directory list file(s) not found (ULP, ULPTEST)
  1136.         110     Unable to allocate heap memory (All)
  1137.         111     Unable to open or lock disk logging file (ULP, ULPTEST, ULPDB)
  1138.         112     Invalid registration code or attempting to run 286+ version
  1139.                    without registering (ULP, ULPTEST, ULPDB)
  1140.         113     Unable to open/lock CRC database file(s) (ULP, ULPTEST, ULPDB)
  1141.         114     Unable to open BBS ads database file (ULP, ULPADS)
  1142.         115     Invalid filename provided by user on command-line (ULPTEST)
  1143.         116     Invalid path provided by user on command-line (ULPDB)
  1144.         117     Invalid or no node number (valid values are 1 to 256) (ULPTEST)
  1145.         118     CRC database usage not enabled (configuration file parameter
  1146.                    DUPE_CHK is set to 'no') (ULPDB)
  1147.         120     Invalid or old database format (All)
  1148.         121     Unable to process com port/invalid port parameter (ULPTEST)
  1149.         122     Unable to access PCBOARD.DAT/PCBOARD.SYS (ULPTEST)
  1150.         123     CRC database failed validation test (ULP, ULPTEST, ULPDB)
  1151.         200     Undefined error (internal to ULP system program(s))
  1152.